﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionBudget.Objects;

namespace GestionBudget.Controls
{
    public partial class ucDevise : ControlObject
    {
        private object CellValue;
        private bool erreur;

        public ucDevise()
        {
            InitializeComponent();
            dgvDevises.AutoGenerateColumns = false;
        }

        public override string TitreControl
        {
            get
            {
                return "Gestion des devises";
            }
        }

        public override void ChargerListe()
        {
            dgvDevises.DataSource = DictionnaireDonnees.ListeDevises.ToList();
        }

        public override bool Ajouter()
        {
            Devise devise = Devise.Creer();

            ChargerListe();
            return true;
        }

        public override void Sauvegarder()
        {
            dgvDevises.EndEdit();

            if (!erreur)
            {
                foreach (ObjectPersistent devise in DictionnaireDonnees.ListeDevises.Where(d => d.EstNouveau || d.EstModifie))
                {
                    devise.Sauvegarder();
                }

                ChargerListe();
            }
        }

        public override bool Supprimer()
        {
            if (dgvDevises.SelectedRows.Count > 0)
            {
                foreach (DataGridViewRow selectedRow in dgvDevises.SelectedRows)
                {
                    Devise d = selectedRow.DataBoundItem as Devise;

                    DictionnaireDonnees.Supprimer((ObjectPersistent)d);
                }

                ChargerListe();
                return true;
            }
            else
            {
                return false;
            }
        }

        private void dgvDevises_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            erreur = false;
            DataGridView dgv = sender as DataGridView;
            object nouvelleValeur;

            if (dgv.CurrentCell != null && CellValue != null)
            {
                nouvelleValeur = dgv.CurrentCell.Value;
               if ((CellValue.Equals(nouvelleValeur)) && (!String.IsNullOrEmpty(nouvelleValeur.ToString())))
                {
                    (this.Parent as FormPrincipal).GestionBouton();
                }
                else if (String.IsNullOrEmpty(nouvelleValeur.ToString()))
                {
                    dgv.CurrentCell.Value = CellValue;
                }
            }
        }

        private void dgvDevises_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            CellValue = Convert.ToString((sender as DataGridView).CurrentCell.Value);
        }

        private void dgvDevises_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            erreur = true;
            MessageBox.Show("La valeur n'est pas valide.", "Avertissement", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
}
